package com.hsu.apibackend.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hsu.apibackend.common.ErrorCode;
import com.hsu.apibackend.exception.BusinessException;
import com.hsu.apibackend.mapper.ProductInfoMapper;
import com.hsu.apibackend.model.entity.ProductInfo;
import com.hsu.apibackend.service.ProductInfoService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * @Author Hsu琛君珩
 * @Date 2024-09-09
 * @Description 产品信息服务实现类，处理产品信息相关的业务逻辑
 * @Version v1.0.0
 */
@Service
public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, ProductInfo> implements ProductInfoService {

    /**
     * 校验产品信息是否合法
     *
     * @param productInfo 产品信息对象
     * @param add         是否为创建时的校验，创建时所有字段不能为空
     * @throws BusinessException 如果校验失败会抛出业务异常
     */
    @Override
    public void validProductInfo(ProductInfo productInfo, boolean add) {
        if (productInfo == null) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR, "产品信息不能为空");
        }

        String name = productInfo.getName();
        String description = productInfo.getDescription();
        Integer total = productInfo.getTotal();
        Date expirationTime = productInfo.getExpirationTime();
        String productType = productInfo.getProductType();
        Integer addPoints = productInfo.getAddPoints();

        // 创建时，确保必填字段非空
        if (add && StringUtils.isAnyBlank(name)) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR, "产品名称不能为空");
        }

        // 校验积分和金额是否为正数
        if (addPoints < 0) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR, "增加的积分不能为负数");
        }

        if (total < 0) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR, "售卖金额不能为负数");
        }
    }
}
